home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWViews / FWView.h < prev    next >
Encoding:
Text File  |  1996-09-17  |  12.1 KB  |  373 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWView.h
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWVIEW_H
  11. #define FWVIEW_H
  12.  
  13. // ----- OpenDoc -----
  14.  
  15. #ifndef FWODTYPS_H
  16. #include "FWODTyps.h"
  17. #endif
  18.  
  19. // ----- Foundation Layer -----
  20.  
  21. #ifndef FWEXCLIB_H
  22. #include "FWExcLib.h"
  23. #endif
  24.  
  25. #ifndef FWCLAINF_H
  26. #include "FWClaInf.h"
  27. #endif
  28.  
  29. #ifndef FWARDYNA_H
  30. #include "FWArDyna.h"
  31. #endif
  32.  
  33. // ----- OS Layer -----
  34.  
  35. #ifndef FWPOINT_H
  36. #include "FWPoint.h"
  37. #endif
  38.  
  39. #ifndef FWRECT_H
  40. #include "FWRect.h"
  41. #endif
  42.  
  43. #ifndef FWGC_H
  44. #include "FWGc.h"
  45. #endif
  46.  
  47. // ----- ODUtil -----
  48.  
  49. #ifndef FWORDCOL_H
  50. #include "FWOrdCol.h"
  51. #endif
  52.  
  53. // ----- Framework Layer -----
  54.  
  55. #ifndef FWEVENTH_H
  56. #include "FWEventH.h"
  57. #endif
  58.  
  59. #ifndef FWVIEWS_K
  60. #include "FWViews.k"
  61. #endif
  62.  
  63. //========================================================================================
  64. // Forward declarations
  65. //========================================================================================
  66.  
  67. class FW_CFrame;
  68. class FW_CSuperView;
  69. class FW_CPrivOrderedCollection;
  70. class FW_CScroller;
  71. class FW_CScrollBar;
  72. class FW_CPrintHandler;
  73. struct Environment;
  74.  
  75. //========================================================================================
  76. //     View Types & Constants
  77. //========================================================================================
  78.  
  79. // Binding for simply layout management
  80. typedef long FW_ViewBinding;
  81.  
  82. // Note: View Binding constants are defined in FWViews.k
  83.  
  84. //========================================================================================
  85. // CLASS FW_CView
  86. //========================================================================================
  87.  
  88. class FW_CView : public FW_MEventHandler
  89. {
  90. friend FW_CSuperView;
  91.  
  92. public:
  93.     FW_DECLARE_CLASS
  94.  
  95. //----------------------------------------------------------------------------------------
  96. //    Initialization/destruction
  97. //
  98. public:
  99.     virtual ~FW_CView();
  100.     
  101. protected:
  102.     // one-step initialization constructor
  103.     FW_CView(Environment* ev, 
  104.                 FW_CSuperView* container, 
  105.                 const FW_CRect& bounds, 
  106.                  ODID viewID);
  107.  
  108.     // two-step initialization constructor
  109.     FW_CView(Environment* ev);
  110.  
  111. //----------------------------------------------------------------------------------------
  112. //    Inherited API
  113. //
  114. public:
  115.     virtual FW_Handled            HandleMouseUp(Environment* ev, 
  116.                                     const FW_CMouseEvent& theMouseEvent);
  117.     virtual FW_Handled            HandleMouseDown(Environment* ev, 
  118.                                     const FW_CMouseEvent& theMouseEvent);    
  119.     virtual FW_Handled            HandleBGMouseDown(Environment* ev, 
  120.                                     const FW_CMouseEvent& theMouseEvent);
  121.     
  122.     virtual FW_Handled            DoBGMouseDown(Environment *ev, const FW_CMouseEvent& theMouseEvent);
  123.  
  124. //----------------------------------------------------------------------------------------
  125. //    New API
  126. //
  127. public:
  128.     // ----- Getters/Setters -----
  129.     ODID                        GetViewID(Environment* ev) const;
  130.     virtual void                SetViewID(Environment* ev, ODID viewID);
  131.     
  132.     FW_CSuperView*                GetSuperView(Environment* ev) const;
  133.     
  134.     // Bounds are in parent view coordinates (in content space)
  135.     FW_CRect                     GetBounds(Environment* ev) const;
  136.     
  137.     // in view content coordinates
  138.     virtual FW_CRect             GetBoundsInContent(Environment *ev) const;
  139.     
  140.     // Visible bounds are in frame coordinates
  141.     FW_CRect                    GetVisibleBounds(Environment* ev) const; 
  142.     
  143.     virtual FW_CPoint            GetExtent(Environment* ev) const;    // just return the bounds
  144.     
  145.     FW_Boolean                    IsVisible(Environment* ev) const;
  146.     virtual void                SetVisible(Environment* ev, FW_Boolean visible, 
  147.                                         FW_Boolean propagate = TRUE);
  148.     
  149.     FW_ViewBinding                GetBindings(Environment* ev) const;
  150.     void                        SetBindings(Environment* ev, FW_ViewBinding bindings);
  151.     
  152.     // ----- Invalidate/Validate -----
  153.     //    always in view content coordinate
  154.     void                        Invalidate(Environment* ev, const FW_CRect& rect, FW_Boolean allFrames = FALSE);
  155.     void                        Invalidate(Environment* ev, ODShape* shape = NULL, FW_Boolean allFrames = FALSE);
  156.     void                        Validate(Environment* ev, const FW_CRect& rect, FW_Boolean allFrames = FALSE);
  157.     void                        Validate(Environment* ev, ODShape* shape = NULL, FW_Boolean allFrames = FALSE);
  158.  
  159.     // ----- Geometry utilities -----
  160.     FW_CPoint                     GetLocation(Environment* ev) const;
  161.     FW_CPoint                     GetSize(Environment* ev) const;
  162.     
  163.     virtual void                 SetLocation(Environment* ev, const FW_CPoint& loc, FW_ERedrawVerb redraw = FW_kInvalidate); 
  164.     virtual void                 SetSize(Environment* ev, const FW_CPoint& size, FW_ERedrawVerb redraw = FW_kInvalidate); 
  165.     virtual void                LocationChanged(Environment* ev, const FW_CPoint& oldLoc);
  166.     virtual void                SizeChanged(Environment* ev, const FW_CPoint& oldSize);
  167.  
  168.     virtual void                AdjustToNewLayout(Environment *ev,  const FW_CPoint& oldExtent, 
  169.                                                 const FW_CPoint& newExtent, FW_ERedrawVerb redraw);
  170.     
  171.     FW_Boolean                    IsMouseWithin(Environment* ev, ODFacet* odFacet, 
  172.                                         const FW_CPoint& theMousePoint) const;
  173.     virtual FW_CView*            GetViewContaining(Environment* ev, ODFacet* odFacet, 
  174.                                         const FW_CPoint& theMousePoint);
  175.     void                        SetResizeInvalidates(Environment* ev, FW_Boolean invalidate);
  176.                                 
  177.     // ----- Coordinates Conversion -----
  178.     ODTransform*                 AcquireViewToFrameTransform(Environment* ev) const;
  179.     virtual ODTransform*         AcquireViewContentToFrameTransform(Environment* ev) const;
  180.  
  181.     void                        FrameToView(Environment *ev, FW_CPoint& point) const;
  182.     void                        FrameToView(Environment *ev, FW_CRect& rect) const;
  183.     void                        FrameToView(Environment *ev, ODShape* shape) const;
  184.     void                        ViewToFrame(Environment *ev, FW_CPoint& point) const;    
  185.     void                        ViewToFrame(Environment *ev, FW_CRect& rect) const;    
  186.     void                        ViewToFrame(Environment *ev, ODShape* shape) const;    
  187.  
  188.     void                        FrameToViewContent(Environment *ev, FW_CPoint& point) const;
  189.     void                        FrameToViewContent(Environment *ev, FW_CRect& rect) const;
  190.     void                        FrameToViewContent(Environment *ev, ODShape* shape) const;
  191.     void                        ViewContentToFrame(Environment *ev, FW_CPoint& point) const;    
  192.     void                        ViewContentToFrame(Environment *ev, FW_CRect& rect) const;    
  193.     void                        ViewContentToFrame(Environment *ev, ODShape* shape) const;    
  194.         
  195.     // ----- Methods on subviews -----
  196.     
  197.     FW_Boolean                    IsSubViewOf(Environment* ev, const FW_CSuperView* parentView) const;
  198.     virtual FW_Boolean            HasSubViews(Environment* ev) const;
  199.     virtual FW_CView*            FindViewByID(Environment* ev, ODID requestedID) const;
  200.     
  201.     // ----- Content View -----
  202.     
  203.     virtual FW_Boolean            IsContentView(Environment* ev) const;
  204.  
  205.     // ----- Methods on Frame -----
  206.     virtual FW_CFrame*            GetFrame(Environment* ev) const;
  207.     virtual FW_Boolean             IsFrame(Environment* ev) const;
  208.     
  209.     // ----- Drawing -----
  210.     virtual FW_Handled            HandleDraw(Environment *ev, ODFacet* odFacet, ODShape* invalidShape);
  211.     virtual void                Draw(Environment *ev, ODFacet* facet, ODShape* invalidShape);
  212.  
  213.     // ----- Events -----
  214.     virtual FW_Handled             DoMouseEnter(Environment* ev, ODFacet* odFacet, const FW_CPoint& theMousePoint, ODEventInfo* eventInfo);
  215.     virtual FW_Handled             DoMouseWithin(Environment* ev, ODFacet* odFacet, const FW_CPoint& theMousePoint, ODEventInfo* eventInfo);
  216.     virtual FW_Handled             DoMouseLeave(Environment* ev, ODFacet* odFacet, ODEventInfo* eventInfo);
  217.     
  218.     virtual void                 HandleActivateEvent(Environment* ev, const FW_CActivateEvent& theActivateEvent);
  219.     virtual void                 DoActivateEvent(Environment* ev, const FW_CActivateEvent& theActivateEvent);
  220.  
  221.     // ----- Cursor Adjustment -----
  222.     virtual FW_Handled            AdjustCursor(Environment *ev, ODFacet* odFacet, const FW_CPoint& theMousePoint, ODEventInfo* eventInfo);
  223.  
  224.     // ----- Archiving -----
  225.     // FW_CView is an abstract base class, so we never see a concrete
  226.     // instance of an FW_CView in a stream.  Nonetheless, it is convenient to
  227.     // define the following methods here, since they can be reused by the
  228.     // concrete view subclasses.
  229.     
  230.     static void                    Read(FW_CReadableStream& stream, FW_ClassTypeConstant type, void* object);
  231.     static void                 Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
  232.  
  233.     virtual void                Flatten(Environment*ev, FW_CWritableStream& stream) const;
  234.     virtual void                InitializeFromStream(Environment*ev, FW_CReadableStream& stream);
  235.     virtual void                PostCreateViewFromStream(Environment *ev);
  236.     
  237. //----------------------------------------------------------------------------------------
  238. //    Internal API
  239. //
  240. public:
  241.     virtual void                 PrivInvalidateCachedTransforms(Environment* ev);
  242.  
  243.     virtual void                PrivInvalidateViewIternalTransform(Environment* ev);
  244.  
  245.     FW_Boolean                    PrivIsTopPrintedView(Environment* ev) const;
  246.     void                        PrivSetTopPrintedView(Environment* ev, FW_Boolean topPrintedView);
  247.  
  248.     virtual void                PrivAcquireContentScrollShape(Environment* ev,
  249.                                                                 FW_XYSelector direction,
  250.                                                                 ODShape* scrollShape) const;
  251.  
  252. protected:
  253.     void                        PrivSetBounds(Environment *ev, const FW_CRect& bounds);
  254.     virtual void                PrivInvalidateVisibleBounds(Environment *ev);
  255.  
  256. private:
  257.     virtual void                PrivPostCreateViewFromStream(Environment *ev);
  258.  
  259. //----------------------------------------------------------------------------------------
  260. //    Data Members
  261. //
  262. private:
  263.     ODID                        fViewID;            // id set by user
  264.     FW_CSuperView*                fSuperView;            // container view (NULL for FW_CFrame)
  265.     FW_CRect                    fBounds;            // position inside SuperView's content
  266.     FW_CPrivOrderedCollection*    fAdorners;            // (not implemented yet)
  267.     FW_Boolean                    fVisible;            // visible state
  268.     FW_Boolean                    fResizeInvalidates;    // invalidate whole view when resized
  269.     FW_ViewBinding                fBindings;            // for layout management 
  270.     ODTransform*                fViewToFrameTransform;    // internal use
  271.     FW_Boolean                    fTopPrintedView;        // internal use
  272.     FW_Boolean                    fValidVisibleBounds;
  273.     FW_CRect                    fVisibleBounds;        // Cahed visible bounds of the view 
  274.                                                     // through all its superviews (in frame coordinate)
  275. };
  276.  
  277.  
  278. //========================================================================================
  279. // class FW_CViewCollection
  280. //========================================================================================
  281.  
  282. class FW_CViewCollection : public FW_TOrderedCollection<FW_CView>
  283. {
  284. public:
  285.     FW_DECLARE_AUTO(FW_CViewCollection)
  286.     
  287.     FW_CViewCollection() :
  288.         FW_TOrderedCollection<FW_CView>(){}
  289.     ~FW_CViewCollection() {}
  290. };
  291.  
  292.  
  293.  
  294. //========================================================================================
  295. // class FW_CViewCollectionIterator
  296. //========================================================================================
  297.  
  298. class FW_CViewCollectionIterator : public FW_TOrderedCollectionIterator<FW_CView>
  299. {
  300. public:
  301.     FW_DECLARE_AUTO(FW_CViewCollectionIterator)
  302.     
  303.     FW_CViewCollectionIterator(FW_CViewCollection* collection) :
  304.         FW_TOrderedCollectionIterator<FW_CView>(collection){}
  305.     ~FW_CViewCollectionIterator() {}
  306. };
  307.  
  308.  
  309. //========================================================================================
  310. // Inlines
  311. //========================================================================================
  312.  
  313. //----------------------------------------------------------------------------------------
  314. // FW_CView inlines
  315. //----------------------------------------------------------------------------------------
  316.  
  317. inline FW_Boolean FW_CView::PrivIsTopPrintedView(Environment*) const
  318. {
  319.     return fTopPrintedView;
  320. }
  321.  
  322. inline void FW_CView::PrivSetTopPrintedView(Environment*, FW_Boolean topPrintedView)
  323. {
  324.     fTopPrintedView = topPrintedView;
  325. }
  326.  
  327. inline ODID FW_CView::GetViewID(Environment*) const
  328. {
  329.     return fViewID;
  330. }
  331.  
  332. inline FW_CSuperView* FW_CView::GetSuperView(Environment*) const 
  333. {
  334.     return fSuperView;
  335. }
  336.  
  337. inline FW_CRect FW_CView::GetBounds(Environment*) const 
  338. {
  339.     return fBounds;
  340. }
  341.  
  342. inline FW_CPoint FW_CView::GetLocation(Environment*) const 
  343. {
  344.     return fBounds.TopLeft();
  345. }
  346.  
  347. inline FW_CPoint FW_CView::GetSize(Environment*) const 
  348. {
  349.     return fBounds.Size();
  350. }
  351.  
  352. inline void FW_CView::PrivSetBounds(Environment*, const FW_CRect& bounds)  
  353. {
  354.     fBounds = bounds;
  355. }
  356.  
  357. inline FW_ViewBinding FW_CView::GetBindings(Environment*) const
  358. {
  359.     return fBindings;
  360. }
  361.  
  362. inline void FW_CView::SetBindings(Environment*, FW_ViewBinding bindings)
  363. {
  364.     fBindings = bindings;
  365. }
  366.  
  367. inline void FW_CView::SetResizeInvalidates(Environment*, FW_Boolean invalidate)
  368. {
  369.     fResizeInvalidates = invalidate;
  370. }
  371.  
  372. #endif
  373.